#ifndef __APP_MQTT_H__
#define __APP_MQTT_H__

#include "MQTTAsync.h"
#include <stdint.h>
#include <stdbool.h>

#define TOPIC_UPLOAD_DATAS "LSTS/dataupload"     //数据上报
#define TOPIC_COMMAND_SELF "LSTS/command/"       //指定OBU还需+dev_id
#define TOPIC_COMMAND_ALL  "LSTS/command/all"    //所有OBU
#define TOPIC_COMMAND_RET  "LSTS/command/return" //指令返回
#define MQTT_QOS           2                     //Mqtt服务质量等级

/**********************************厂家根据各自情况实现***************************************/
#define TOKEN_RESP_BUF_MAX_LEN 2048                 //lst_get_token.sh脚本返回数据最大长度
#define GET_MQTT_TOKEN_SHELL   "./lst_get_token.sh" //获取token 脚本
#define CONFIG_KEY_CONFIG_NAME "config.ini"         //配置文件名
#define CONFIG_KEY_MQTT_SERVER "MQTT_SERVER"        //配置文件的节名
#define CONFIG_KEY_SYSTEM      "SYS"                //配置文件的节名
/*******************************************************************************************/

typedef struct _Mqtt_Token_Response
{

    char *msg;      //响应消息(操作成功)
    int expires;    //过期时间
    char code;      //响应码 1: 成功， 40103：客户端认证失败， 500 : 服务端错误
    char *token;    //token
    char *clientId; //客户ID
} Mqtt_Token_Response;

typedef struct _Mqtt_Connect_Info
{
    char mqtt_addr[128]; //MQTT服务器和端口
    MQTTAsync client;    //MQTT客户端句柄
    bool connected;      //MQTT是否连接到服务器
} Mqtt_Connect_Info;

extern Mqtt_Token_Response mqtt_token_response;
extern Mqtt_Connect_Info mqtt_connect_info;

//MQTT服务初始化
int mqtt_service_init();

//通过MQTT上传数据
void mqtt_upload_datas(uint8_t *data, int len, char *topic);

//执行shell命令
int shell_cmd(char *cmd, char *buff, int size);
#endif
